from Class_Cliente import *
from Class_ConexaoDb import *


class ClienteDao:
    def __init__(self):
        self.conexao = ConexaoDb()

    def cadastrarCliente(self, cliente):
        nome = cliente.GetNome()
        telefone1 = cliente.GetListaTelefones()[0]
        telefone2 = cliente.GetListaTelefones()[1]
        email = cliente.GetEmail()
        cpf = cliente.GetCPF()
        dataNasc = cliente.GetDataNascimento()

        sql1 = '''
INSERT INTO Clientes (NomeCompleto, Telefone, Telefone2, Email, DataNascimento, CPF, Removido)
VALUES ('%s', '%s', '%s', '%s', '%s', '%s', 0)
'''%(nome, telefone1, telefone2, email, dataNasc, cpf)

        comandosSQL = [sql1]

        
        db = mdb.connect(self.conexao.Host, self.conexao.Usuario, self.conexao.Senha, self.conexao.NomeDb)
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False

    def editarCliente(self, cliente):
        identificador = cliente.GetId()
        nome = cliente.GetNome()
        telefone1 = cliente.GetListaTelefones()[0]
        telefone2 = cliente.GetListaTelefones()[1]
        email = cliente.GetEmail()
        cpf = cliente.GetCPF()
        dataNasc = cliente.GetDataNascimento()

        sql1 = '''
UPDATE Clientes SET NomeCompleto = '%s', Telefone = '%s', Telefone2 = '%s',
Email = '%s', DataNascimento = '%s',CPF = '%s', Removido = 0 WHERE IdCliente = '%s'
'''%(nome, telefone1, telefone2, email, dataNasc, cpf, identificador)

        comandosSQL = [sql1]

        
        db = mdb.connect(self.conexao.Host, self.conexao.Usuario, self.conexao.Senha, self.conexao.NomeDb)
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False

    def removerCliente(self, cliente):
        identificador = cliente.GetId()
        sql1 ='''
UPDATE Clientes SET Removido = 1 WHERE IdCliente = '%s'
''' % (identificador)
        comandosSQL = [sql1]

        
        db = mdb.connect(self.conexao.Host, self.conexao.Usuario, self.conexao.Senha, self.conexao.NomeDb)
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False

    def pesquisarListaClientes(self, dado, campo):
        dado = "%"+dado+"%"
        sql1 = '''
SELECT * FROM Clientes WHERE %s LIKE '%s' order by NomeCompleto
'''%(campo, dado)

        comandosSQL = [sql1]

        
        db = mdb.connect(self.conexao.Host, self.conexao.Usuario, self.conexao.Senha, self.conexao.NomeDb)
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)

            dados = cursor.fetchall()
            cursor.close()
            return self.CriarObjetosCliente(dados)
        except mdb.Error, e:
            print "Error %d: %s" % (e.args[0], e.args[1])
            return self.CriarObjetosCliente(dados)

    def pesquisarCliente(self, dado, campo):
        
        sql1 = '''
SELECT * FROM Clientes WHERE %s LIKE '%s' order by NomeCompleto
'''%(campo, dado)

        comandosSQL = [sql1]

        
        db = mdb.connect(self.conexao.Host, self.conexao.Usuario, self.conexao.Senha, self.conexao.NomeDb)
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)

            dados = cursor.fetchall()
            cursor.close()
            
            cliente = self.CriarObjetosCliente(dados)[0]
            return cliente
        except :
            
            return None

        
############################
# -- METODOS AUXILIARES -- #
############################


    def CriarObjetosCliente(self, dados):
        ListaClientes = []
        for i in dados:
            ID = str(i[0])
            NomeCompleto = str(i[1])
            ListaTelefones = [str(i[2]), str(i[3])]
            Email = i[4]
            DataNascimento = (i[5])
            CPF = i[6]
            Removido = i[-1]
            
            C = Cliente(NomeCompleto, DataNascimento, ListaTelefones, Email, CPF, ID)
            if (Removido == 0):
                ListaClientes.append(C)

        return ListaClientes
        
if __name__ == "__main__":
    dao = ClienteDao()
    
